Skip to content

Conversation

@alexander-alderman-webb
Copy link
Contributor

@alexander-alderman-webb alexander-alderman-webb commented Jan 21, 2026

Description

Set the system instruction attribute, conforming to OTtel structure:

https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-system-instructions

Issues

Reminders

@github-actions
Copy link
Contributor

github-actions bot commented Jan 21, 2026

Semver Impact of This PR

🟡 Minor (new features)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

  • feat(anthropic): Set system instruction attribute by alexander-alderman-webb in #5353
  • feat(google-genai): Set system instruction attribute by alexander-alderman-webb in #5354
  • feat(langchain): Set system instruction attribute by alexander-alderman-webb in #5357
  • feat(openai): Set system instruction attribute for Completions API by alexander-alderman-webb in #5359
  • feat(openai-agents): Set system instruction attribute by alexander-alderman-webb in #5355
  • feat(pydantic-ai): Set system instruction attribute by alexander-alderman-webb in #5356

Bug Fixes 🐛

  • fix(ai): Keep single content input message by alexander-alderman-webb in #5345

Internal Changes 🔧

  • ci(release): Fix changelog-preview permissions by BYK in #5368
  • ci: Fix path in AI integration tests by alexander-alderman-webb in #5347

🤖 This preview updates automatically when you update the PR.

Comment on lines +381 to +388
if "blocks" in param_id:
assert span["data"]["gen_ai.usage.output_tokens"] == 2
assert span["data"]["gen_ai.usage.input_tokens"] == 7
assert span["data"]["gen_ai.usage.total_tokens"] == 9
else:
assert span["data"]["gen_ai.usage.output_tokens"] == 2
assert span["data"]["gen_ai.usage.input_tokens"] == 1
assert span["data"]["gen_ai.usage.total_tokens"] == 3
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not good, but unrelated to this PR.

cursor[bot]

This comment was marked as outdated.

@alexander-alderman-webb alexander-alderman-webb marked this pull request as draft January 22, 2026 14:58
@alexander-alderman-webb alexander-alderman-webb marked this pull request as ready for review January 22, 2026 16:49
cursor[bot]

This comment was marked as outdated.

@alexander-alderman-webb alexander-alderman-webb marked this pull request as draft January 26, 2026 08:08
@alexander-alderman-webb alexander-alderman-webb marked this pull request as ready for review January 26, 2026 08:36
@alexander-alderman-webb alexander-alderman-webb changed the title feat(openai): Set system instruction attribute feat(openai): Set system instruction attribute for Completions API Jan 26, 2026
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

message
for message in messages
if not _is_system_instruction_completions(message)
]
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Iterator consumed twice causes silent data loss

Low Severity

In _set_completions_api_input_data, the messages parameter is iterated twice: first in _get_system_instructions_completions(messages) at line 332, then again in the list comprehension at lines 353-357 to build non_system_messages. If messages is a generator or single-use iterator rather than a list, the second iteration would yield no results, silently dropping all non-system messages from telemetry. While OpenAI's SDK typically uses lists, the type annotation accepts Iterable, which permits generators.

Fix in Cursor Fix in Web

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

great point, but unfortunately truncate_and_annotate_messages() also assumes that the input is a list.

so the type is correct but our SDK performs poorly in this case. I will tackle this in another PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants